package util;

import DAO.NodeList;
import DAO.TreeNode;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

import java.io.*;
import java.util.List;
import java.util.Optional;

/**
 * 设置按钮的工具类
 */
public class ButtonUtil {
    public static String workingFile=null;


    // 打开文件
    public void openFile(){
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("打开文件");

        String currentDirectory = System.getProperty("user.dir");
        fileChooser.setInitialDirectory(new File(currentDirectory));

        //仅选择.mm文件
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("mm files (*.mm)", "*.mm");
        fileChooser.getExtensionFilters().add(extFilter);

        Stage primaryStage = new Stage();  // 建立一个私有舞台展示文件选择框

        // 显示文件选择对话框
        File selectedFile = fileChooser.showOpenDialog(primaryStage);

        if (selectedFile != null) {
            System.out.println("选择的文件为: " + selectedFile.getAbsolutePath());
            // 在这里处理所选文件，比如读取文件内容等
            try {
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream(selectedFile.getAbsolutePath()));
                NodeList.list = (List<TreeNode>) ois.readObject();
                //记录已打开文件的绝对路径
                workingFile=selectedFile.getAbsolutePath();
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("没有选中文件");
        }
    }

    //另存为
    public void saveAs() {
        write("另存为");
    }

    // 保存文件
    public void saveFile(){
        ObjectOutputStream oos=null;
        // 判断是否已经保存过文件
        if(workingFile!=null){
            try {
                oos = new ObjectOutputStream(new FileOutputStream(workingFile));
                oos.writeObject(NodeList.list);
                oos.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(oos!=null) {
                    try {
                        oos.close();
                    }catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }else{
            write("保存文件");
        }
    }

    //选择文件夹保存
    private void write(String chooserName){
        // 弹出文件选择器
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle(chooserName);

        // 设置初始路径为程序根目录
        String currentDirectory = System.getProperty("user.dir");
        fileChooser.setInitialDirectory(new File(currentDirectory));

        //仅能选择.mm文件
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("mm files (*.mm)", "*.mm");
        fileChooser.getExtensionFilters().add(extFilter);

        // 显示文件选择对话框
        Stage primaryStage = new Stage();

        //返回选择文件
        File selectedFile = fileChooser.showSaveDialog(primaryStage);
        // 保存文件
        if (selectedFile != null) {
            ObjectOutputStream oos=null;
            try {
                 oos= new ObjectOutputStream(new FileOutputStream(selectedFile.getAbsolutePath()));
                // 保存list
                oos.writeObject(NodeList.list);
                oos.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(oos!=null) {
                    try {
                        oos.close();
                    }catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        else {
            System.out.println("没有选中文件");
        }
        // 记录已打开文件路径
        workingFile= selectedFile.getAbsolutePath();
    }

    public static void setWorkingFile(String workingFile) {
        ButtonUtil.workingFile = workingFile;
    }

    public static String getWorkingFile() {
        return workingFile;
    }
}


